home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / mail / pine3.96.tar.gz / pine3.96.tar / pine3.96 / pine / osdep / expnfldr < prev    next >
Text File  |  1995-12-11  |  2KB  |  68 lines

  1. /*----------------------------------------------------------------------
  2.       Expand a folder name, taking account of the folders_dir and `~'.
  3.  
  4.   Args: filename -- The name of the file that is the folder
  5.  
  6.  Result: The folder name is expanded in place.  
  7.          Returns 0 and queues status message if unsuccessful.
  8.          Input string is overwritten with expanded name.
  9.          Returns 1 if successful.
  10.  
  11. BUG should limit length to MAXPATH
  12.   ----*/
  13. int
  14. expand_foldername(filename)
  15.     char *filename;
  16. {
  17.     char         temp_filename[MAXPATH+1];
  18.  
  19.     dprint(5, (debugfile, "=== expand_foldername called (%s) ===\n",filename));
  20.  
  21.     /*
  22.      * We used to check for valid filename chars here if "filename"
  23.      * didn't refer to a remote mailbox.  This has been rethought
  24.      */
  25.  
  26.     strcpy(temp_filename, filename);
  27.     if(strucmp(temp_filename, "inbox") == 0) {
  28.         strcpy(filename, ps_global->VAR_INBOX_PATH == NULL ? "inbox" :
  29.                ps_global->VAR_INBOX_PATH);
  30.     } else if(temp_filename[0] == '{') {
  31.         strcpy(filename, temp_filename);
  32.     } else if(ps_global->restricted
  33.             && (strindex("./~", temp_filename[0]) != NULL
  34.             || srchstr(temp_filename,"/../"))){
  35.     q_status_message(SM_ORDER, 0, 3, "Can only open local folders");
  36.     return(0);
  37.     } else if(temp_filename[0] == '*') {
  38.         strcpy(filename, temp_filename);
  39.     } else if(ps_global->VAR_OPER_DIR && srchstr(temp_filename,"..")){
  40.     q_status_message(SM_ORDER, 0, 3,
  41.              "\"..\" not allowed in folder name");
  42.     return(0);
  43.     } else if (temp_filename[0] == '~'){
  44.         if(fnexpand(temp_filename, sizeof(temp_filename)) == NULL) {
  45.             char *p = strindex(temp_filename, '/');
  46.             if(p != NULL)
  47.               *p = '\0';
  48.             q_status_message1(SM_ORDER, 3, 3,
  49.                     "Error expanding folder name: \"%s\" unknown user",
  50.                temp_filename);
  51.             return(0);
  52.         }
  53.         strcpy(filename, temp_filename);
  54.     } else if(temp_filename[0] == '/') {
  55.         strcpy(filename, temp_filename);
  56.     } else if(F_ON(F_USE_CURRENT_DIR, ps_global)){
  57.     strcpy(filename, temp_filename);
  58.     } else if(ps_global->VAR_OPER_DIR){
  59.     build_path(filename, ps_global->VAR_OPER_DIR, temp_filename);
  60.     } else {
  61.     build_path(filename, ps_global->home_dir, temp_filename);
  62.     }
  63.     dprint(5, (debugfile, "returning \"%s\"\n", filename));    
  64.     return(1);
  65. }
  66.  
  67.  
  68.